#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 函数：模拟FIFO（先进先出）页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  // TODO
  size_t len = strlen (queue_frames) + 1;
  int counter=1;
  for (size_t i=0; i<len; ++i) {
    if (queue_frames[i] == ',') 
      counter++;
  }
  int *fifo = (int*)malloc (num*sizeof(int));
  int index = 0;
  int curSize= 0;
  for (int i=0; i<num; ++i)
    fifo[i] = -1;

  char *token = strtok (queue_frames, ",");
  for (int i=0; i<counter && token != NULL; ++i) {
    int cur = atoi (token);
    token = strtok (NULL, ",");

     int found = 0;
     for (int j=0; j<curSize; ++j) {
        if(fifo[j] == cur) {
          found = 1;
          break;
        }
     }
     if (0 == found) {
       if (curSize< num) {
         fifo[curSize++] = cur;
       } else {
         fifo[index] = cur;
         index = (index + 1) % num;
       }
     }

     printf("Access:%d,Frames: [%d", cur, fifo[0]);  
     for (int k=1; k<num; ++k)
       printf(",%d", fifo[k]);
     printf("]\n");  
  }
}
